// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only

import QtQuick 2.0
import QtGraphs
import QtTest 1.0

Item {
    id: top
    height: 150
    width: 150

    property var empty: null
    property var basic: null
    property var common: null
    property var common_init: null

//    function constructEmpty() {
//        empty = Qt.createQmlObject("
//        import QtQuick 2.2
//        import QtGraphs
//        Bars3D {
//        }", top)
//    }

//    function constructBasic() {
//        basic = Qt.createQmlObject("
//        import QtQuick 2.2
//        import QtGraphs
//        Bars3D {
//            anchors.fill: parent
//            multiSeriesUniform: true
//            barThickness: 0.1
//            barSpacing.width: 0.1
//            barSpacing.height: 0.1
//            barSeriesMargin.width: 0.3
//            barSeriesMargin.height: 0.3
//            barSpacingRelative: false
//            floorLevel: 1.0
//        }", top)
//        basic.anchors.fill = top
//    }

//    function constructCommon() {
//        common = Qt.createQmlObject("
//        import QtQuick 2.2
//        import QtGraphs
//        Bars3D {
//            anchors.fill: parent
//        }", top)
//        common.anchors.fill = top
//    }

//    function constructCommonInit() {
//        common_init = Qt.createQmlObject("
//        import QtQuick 2.2
//        import QtGraphs
//        Bars3D {
//            anchors.fill: parent
//            selectionMode: AbstractGraph3D.SelectionNone
//            shadowQuality: AbstractGraph3D.ShadowQualityLow
//            msaaSamples: 2
//            theme: Theme3D { }
//            renderingMode: AbstractGraph3D.RenderIndirect
//            measureFps: true
//            orthoProjection: false
//            aspectRatio: 3.0
//            optimizationHints: AbstractGraph3D.OptimizationDefault
//            polar: false
//            radialLabelOffset: 2
//            horizontalAspectRatio: 0.2
//            reflection: true
//            reflectivity: 0.1
//            locale: Qt.locale(\"UK\")
//            margin: 0.2
//        }", top)
//        common_init.anchors.fill = top
//    }

//    TODO: Needs either redoing, or fixing the code; see QTBUG-110000 & QTBUG-110001
//    TestCase {
//        name: "Bars3D Empty"
//        when: windowShown

//        function test_empty() {
//            constructEmpty()
//            compare(empty.width, 0, "width")
//            compare(empty.height, 0, "height")
//            compare(empty.multiSeriesUniform, false, "multiSeriesUniform")
//            compare(empty.barThickness, 1.0, "barThickness")
//            compare(empty.barSpacing, Qt.size(1.0, 1.0), "barSpacing")
//            compare(empty.barSeriesMargin, Qt.size(0.0, 0.0), "barSeriesMargin")
//            compare(empty.barSpacingRelative, true, "barSpacingRelative")
//            compare(empty.seriesList.length, 0, "seriesList")
//            compare(empty.selectedSeries, null, "selectedSeries")
//            compare(empty.primarySeries, null, "primarySeries")
//            compare(empty.floorLevel, 0.0, "floorLevel")
//            compare(empty.columnAxis.orientation, AbstractAxis3D.AxisOrientationX)
//            compare(empty.rowAxis.orientation, AbstractAxis3D.AxisOrientationZ)
//            compare(empty.valueAxis.orientation, AbstractAxis3D.AxisOrientationY)
//            compare(empty.columnAxis.type, AbstractAxis3D.AxisTypeCategory)
//            compare(empty.rowAxis.type, AbstractAxis3D.AxisTypeCategory)
//            compare(empty.valueAxis.type, AbstractAxis3D.AxisTypeValue)
//            waitForRendering(top)
//            empty.destroy()
//            waitForRendering(top)
//        }
//    }

//    TODO: Needs either redoing, or fixing the code; see QTBUG-110000 & QTBUG-110001
//    TestCase {
//        name: "Bars3D Basic"
//        when: windowShown

//        function test_1_basic() {
//            constructBasic()
//            compare(basic.width, 150, "width")
//            compare(basic.height, 150, "height")
//            compare(basic.multiSeriesUniform, true, "multiSeriesUniform")
//            compare(basic.barThickness, 0.1, "barThickness")
//            compare(basic.barSpacing, Qt.size(0.1, 0.1), "barSpacing")
//            compare(basic.barSeriesMargin, Qt.size(0.3, 0.3), "barSeriesMargin")
//            compare(basic.barSpacingRelative, false, "barSpacingRelative")
//            compare(basic.floorLevel, 1.0, "floorLevel")
//            waitForRendering(top)
//        }

//        function test_2_basic_change() {
//            basic.multiSeriesUniform = false
//            basic.barThickness = 0.5
//            basic.barSpacing = Qt.size(1.0, 0.0)
//            basic.barSeriesMargin = Qt.size(0.5, 0.0)
//            basic.barSpacingRelative = true
//            basic.floorLevel = 0.2
//            compare(basic.multiSeriesUniform, false, "multiSeriesUniform")
//            compare(basic.barThickness, 0.5, "barThickness")
//            compare(basic.barSpacing, Qt.size(1.0, 0.0), "barSpacing")
//            compare(basic.barSeriesMargin, Qt.size(0.5, 0.0), "barSeriesMargin")
//            compare(basic.barSpacingRelative, true, "barSpacingRelative")
//            compare(basic.floorLevel, 0.2, "floorLevel")
//            waitForRendering(top)
//        }

//        function test_3_basic_change_invalid() {
//            basic.barThickness = -1
//            basic.barSpacing = Qt.size(-1.0, -1.0)
//            basic.barSeriesMargin = Qt.size(-1.0, -1.0)
//            compare(basic.barThickness, -1/*0.5*/, "barThickness") // TODO: Fix once QTRD-3367 is done
//            compare(basic.barSpacing, Qt.size(-1.0, -1.0), "barSpacing")
//            compare(basic.barSeriesMargin, Qt.size(-1.0, -1.0), "barSeriesMargin")
//            waitForRendering(top)
//            basic.destroy()
//            waitForRendering(top)
//        }
//    }

//    TODO: Needs either redoing, or fixing the code; see QTBUG-110000 & QTBUG-110001
//    TestCase {
//        name: "Bars3D Common"
//        when: windowShown

//        function test_1_common() {
//            constructCommon()
//            compare(common.selectionMode, AbstractGraph3D.SelectionItem, "selectionMode")
//            compare(common.shadowQuality, AbstractGraph3D.ShadowQualityMedium, "shadowQuality")
//            if (common.shadowsSupported === true)
//                compare(common.msaaSamples, 4, "msaaSamples")
//            else
//                compare(common.msaaSamples, 0, "msaaSamples")
//            compare(common.theme.type, Theme3D.ThemeQt, "theme")
//            compare(common.renderingMode, AbstractGraph3D.RenderIndirect, "renderingMode")
//            compare(common.measureFps, false, "measureFps")
//            compare(common.customItemList.length, 0, "customItemList")
//            compare(common.orthoProjection, false, "orthoProjection")
//            compare(common.selectedElement, AbstractGraph3D.ElementNone, "selectedElement")
//            compare(common.aspectRatio, 2.0, "aspectRatio")
              // TODO: Once instancing support is in, make this Default instead of Legacy (QTBUG-112445)
//            compare(common.optimizationHints, AbstractGraph3D.OptimizationLegacy, "optimizationHints")
//            compare(common.polar, false, "polar")
//            compare(common.radialLabelOffset, 1, "radialLabelOffset")
//            compare(common.horizontalAspectRatio, 0, "horizontalAspectRatio")
//            compare(common.reflection, false, "reflection")
//            compare(common.reflectivity, 0.5, "reflectivity")
//            compare(common.locale, Qt.locale("C"), "locale")
//            compare(common.queriedGraphPosition, Qt.vector3d(0, 0, 0), "queriedGraphPosition")
//            compare(common.margin, -1, "margin")
//            waitForRendering(top)
//        }

//        function test_2_change_common() {
//            common.selectionMode = AbstractGraph3D.SelectionItem | AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionSlice
//            common.shadowQuality = AbstractGraph3D.ShadowQualitySoftHigh
//            compare(common.shadowQuality, AbstractGraph3D.ShadowQualitySoftHigh, "shadowQuality")
//            common.msaaSamples = 8
//            if (common.shadowsSupported === true)
//                compare(common.msaaSamples, 8, "msaaSamples")
//            else
//                compare(common.msaaSamples, 0, "msaaSamples")
//            common.theme.type = Theme3D.ThemeRetro
//            common.renderingMode = AbstractGraph3D.RenderDirectToBackground
//            common.measureFps = true
//            common.orthoProjection = true
//            common.aspectRatio = 1.0
//            common.optimizationHints = AbstractGraph3D.OptimizationDefault
//            common.polar = true
//            common.radialLabelOffset = 2
//            common.horizontalAspectRatio = 1
//            common.reflection = true
//            common.reflectivity = 1.0
//            common.locale = Qt.locale("FI")
//            common.margin = 1.0
//            compare(common.selectionMode, AbstractGraph3D.SelectionItem | AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionSlice, "selectionMode")
//            compare(common.shadowQuality, AbstractGraph3D.ShadowQualityNone, "shadowQuality") // Ortho disables shadows
//            compare(common.msaaSamples, 0, "msaaSamples") // Rendering mode changes this to zero
//            compare(common.theme.type, Theme3D.ThemeRetro, "theme")
//            compare(common.renderingMode, AbstractGraph3D.RenderDirectToBackground, "renderingMode")
//            compare(common.measureFps, true, "measureFps")
//            compare(common.orthoProjection, true, "orthoProjection")
//            compare(common.aspectRatio, 1.0, "aspectRatio")
//            compare(common.optimizationHints, AbstractGraph3D.OptimizationDefault, "optimizationHints")
//            compare(common.polar, true, "polar")
//            compare(common.radialLabelOffset, 2, "radialLabelOffset")
//            compare(common.horizontalAspectRatio, 1, "horizontalAspectRatio")
//            compare(common.reflection, true, "reflection")
//            compare(common.reflectivity, 1.0, "reflectivity")
//            compare(common.locale, Qt.locale("FI"), "locale")
//            compare(common.margin, 1.0, "margin")
//            waitForRendering(top)
//        }

//        function test_3_change_invalid_common() {
//            common.selectionMode = AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionColumn | AbstractGraph3D.SelectionSlice
//            common.theme.type = -2
//            common.renderingMode = -1
//            common.measureFps = false
//            common.orthoProjection = false
//            common.aspectRatio = -1.0
//            common.polar = false
//            common.horizontalAspectRatio = -2
//            common.reflection = false
//            common.reflectivity = -1.0
//            compare(common.selectionMode, AbstractGraph3D.SelectionItem | AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionSlice, "selectionMode")
//            compare(common.theme.type, -2/*Theme3D.ThemeRetro*/, "theme") // TODO: Fix once QTRD-3367 is done
//            compare(common.renderingMode, -1/*AbstractGraph3D.RenderDirectToBackground*/, "renderingMode") // TODO: Fix once QTRD-3367 is done
//            compare(common.aspectRatio, -1.0/*1.0*/, "aspectRatio") // TODO: Fix once QTRD-3367 is done
//            compare(common.horizontalAspectRatio, -2/*1*/, "horizontalAspectRatio") // TODO: Fix once QTRD-3367 is done
//            compare(common.reflectivity, -1.0/*1.0*/, "reflectivity") // TODO: Fix once QTRD-3367 is done

//            waitForRendering(top)
//            common.destroy()
//            waitForRendering(top)
//        }

//        function test_4_common_initialized() {
//            constructCommonInit()

//            compare(common_init.selectionMode, AbstractGraph3D.SelectionNone, "selectionMode")
//            if (common_init.shadowsSupported === true) {
//                tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityLow)
//                compare(common_init.msaaSamples, 2, "msaaSamples")
//            } else {
//                tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityNone)
//                compare(common_init.msaaSamples, 0, "msaaSamples")
//            }
//            compare(common_init.theme.type, Theme3D.ThemeUserDefined, "theme")
//            compare(common_init.renderingMode, AbstractGraph3D.RenderIndirect, "renderingMode")
//            compare(common_init.measureFps, true, "measureFps")
//            compare(common_init.customItemList.length, 0, "customItemList")
//            compare(common_init.orthoProjection, false, "orthoProjection")
//            compare(common_init.aspectRatio, 3.0, "aspectRatio")
//            compare(common_init.optimizationHints, AbstractGraph3D.OptimizationDefault, "optimizationHints")
//            compare(common_init.polar, false, "polar")
//            compare(common_init.radialLabelOffset, 2, "radialLabelOffset")
//            compare(common_init.horizontalAspectRatio, 0.2, "horizontalAspectRatio")
//            compare(common_init.reflection, true, "reflection")
//            compare(common_init.reflectivity, 0.1, "reflectivity")
//            compare(common_init.locale, Qt.locale("UK"), "locale")
//            compare(common_init.margin, 0.2, "margin")

//            waitForRendering(top)
//            common_init.destroy();
//            waitForRendering(top)
//        }
//    }
}
